package com.lizemin.builderfactorycase.factory.simple;

import com.lizemin.builderfactorycase.factory.entity.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Map;
import java.util.Objects;

/**
 * @author lzm
 * @date 2025/10/19 15:27
 * @description 解析器工厂，将解析器对象缓存起来，不用每次都去创建一个新的解析器对象
 */
public class ParserFactoryV2 {

    /**
     * 解析器缓存
     */
    private static final Map<String, FileParser> PARSER_CACHE = Map.ofEntries(
            Map.entry("pdf", new PdfFileParser()),
            Map.entry("doc", new DocFileParser()),
            Map.entry("yaml", new YamlFileParser()),
            Map.entry("json", new JsonFileParser()),
            Map.entry("txt", new TextFileParser())
    );

    private static final Logger log = LoggerFactory.getLogger(ParserFactoryV2.class);

    /**
     * 获取解析器
     *
     * @param type 文件类型
     * @return 解析器
     */
    public static FileParser getParser(String type) {
        log.info("开始从缓存中获取解析器，文件类型：{}", type);
        FileParser fileParser = PARSER_CACHE.get(type);
        if (Objects.isNull(fileParser)) {
            throw new RuntimeException("不支持的文件类型");
        }
        return fileParser;
    }

}
